# -*- coding: UTF-8 -*-

from copy import *
import time
from Chanson import *
from _Outils.Job import *
from MiniJeux.PartieMiniJeu import *
import os
import random

class PlancherDeDance(PartieMiniJeu):
    def __init__(self, joueurs = None):
        PartieMiniJeu.__init__(self, "FrogDance", joueurs)
        self.description = """Suivez le rythme de la musique en appuyant sur les touches indiquées. Dépendamment de votre rapidité, votre score s'en verra affecté. \nLET'S DANCE BABY!"""
        self.chanson = Chanson.readChanson(self.choisirChansonXML('MiniJeux/FrogDance/model/'))
        for joueur in self.joueurs.values():
            joueur.movesDance = copy(self.chanson.moves)
        self.tempsDebut = 0
        self.tempsFin = 0
        self.jobIsFini = Job(0.3, self.isFini)

    def reset(self, listeJoueurs):
        print 'PlancherDeDance - reset'
        self.__init__(listeJoueurs)
    
    def play(self):
        self.tempsDebut = time.time()
        self.tempsFin = self.tempsDebut + self.chanson.duree
        self.jobIsFini.start()
    
    def isFini(self):
        if(time.time() >= self.tempsFin):
            #! Alors c'est la fin. Fermer tout ce qu'il y a à fermer et bye bye!
            self.termine = True
    
    def choisirChansonXML(self, repertoire):
        """ Cette méthode choisit un fichier XML au hasard dans un répertoire donné. """
        liste = os.listdir(repertoire)
        for i in liste:
            if i[0] == '.': #Enlever les fichiers/repertoires cachés
                liste.remove(i)
        xml = liste[random.randrange(0,len(liste),1)]
        print (0,len(liste),1), random.randrange(0,len(liste),1), random.randrange(0,len(liste),1), random.randrange(0,len(liste),1),  random.randrange(0,len(liste),1)
        return repertoire+xml

    def getMoveCourant(self, nomJoueur):
        #check dans le joueur. (pcq la trame est pas la meme pour tout le monde si un joueur a déjà appuyé sur une touche.
        moves = self.joueurs[nomJoueur].movesDance
        
        tempsEcoule = time.time() - self.tempsDebut
        for move in moves:
            if(tempsEcoule >= move.temps):
                if tempsEcoule >= (move.temps + move.interval):
                    moves.remove(move)
                else:
                    return move.touche
            else:
                return None

        return None
    
    def getCheminMP3(self):
        return self.chanson.chemin
    
    def envoyerMove(self, nomJoueur, direction):
        #check dans le joueur. (pcq la trame est pas la meme pour tout le monde si un joueur a déjà appuyé sur une touche.
        moves = self.joueurs[nomJoueur].movesDance
        
        tempsEcoule = time.time() - self.tempsDebut
        for move in moves:
            if(tempsEcoule >= move.temps):
                if tempsEcoule > (move.temps + move.interval):
                    moves.remove(move)
                else:
                    if(direction == move.touche):
                        #print tempsEcoule - move.temps
                        self.joueurs[nomJoueur].score += int((1 - (tempsEcoule - move.temps)/move.interval)*10)+1
                        b = True
                    else:
                        #print "MANQUÉ!"
                        b = False
                    moves.remove(move)
                    return b

        #print "Manquée"
        return False
        

"""
class PlancherDeDanceReseau(PlancherDeDance, Pyro.core.ObjBase):
    def __init__(self):
        PlancherDeDance.__init__(self)
        Pyro.core.ObjBase.__init__(self)
        
"""